// 220101 0546
/*
Buffer(缓冲区)
一个专门存放二进制数据的缓存区
一个 Buffer 类似于一个整数数组，但它对应于 V8 堆内存之外的一块原始内存。

在v6.0以后，官方文档里面建议使用 Buffer.from() 接口去创建Buffer对象
*/

// 支持的字符编码

// 1、创建Buffer对象
// Buffer.alloc/allocUnsafe/allocUnsafeSlow/fromx4
const buf1 = Buffer.alloc(10);
console.log(buf1); // <Buffer 00 00 00 00 00 00 00 00 00 00>

const buf2 = Buffer.alloc(10, 1);
console.log(buf2); // <Buffer 01 01 01 01 01 01 01 01 01 01>

// 更快，但可能包含旧数据
const buf3 = Buffer.allocUnsafe(10, 1);
console.log(buf3); // 全0

// 一个包含[0x1, 0x2, 0x3] 的
const buf4 = Buffer.from([1,2,3]);
console.log(buf4); // <Buffer 01 02 03>

// 一个包含 UTF-8 字节的
const buf5 = Buffer.from('猫狗');
console.log(buf5); // <Buffer e7 8c ab e7 8b 97>

// 一个包含 Latin-1 字节的
const buf6 = Buffer.from('test', 'latin1');
console.log(buf6); // <Buffer 74 65 73 74>

console.log('END.1---');

// 2.写Buffer
// buf.write(string[, offset[, length]][, encoding])
buf = Buffer.alloc(256);
len = buf.write('This is 地球!1@2#3');
console.log(len); // 20
console.log(buf); // <Buffer 54 68 69 73 20 69 73 20 e5 9c b0 e7 90 83 21 31 40 32 23 33 00

console.log('END.2---');

// 3.从Buffer读取数据
// buf.toString([encoding[, start[, end]]])
// encoding - 使用的编码。默认为 'utf8'

buf = Buffer.alloc(26);
for (var i=0; i<26; i++) {
	buf[i] = i + 97;
}
console.log(buf);
// 开始读取
console.log(buf.toString('ascii'));
console.log(buf.toString('ascii', 0, 5));
console.log(buf.toString('utf8', 0, 5));
console.log(buf.toString(undefined, 0,  5)); // 使用默认的 'utf8' 编码

console.log('END.3---');

// 220102 15:17

// 将 Buffer 转换为 JSON 对象
// buf.toJSON()
// 当字符串化一个 Buffer 实例时，JSON.stringify() 会隐式地调用该 toJSON()。
// bufferJson.js

// 缓冲区合并
// bufferConcat.js

// 缓冲区比较
// buf.compare(otherBuffer);
// 返回一个数字，表示 buf 在 otherBuffer 之前，之后或相同。
// bufferCompare.js

// 缓冲区拷贝
// buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
// bufferCopy.js

// 缓冲区裁剪
// buf.slice([start[, end]])

// 缓冲区长度
// 返回 Buffer 对象所占据的内存长度。
// buf.length;

//
// Node.js Buffer 模块常用的方法
// ...

// 填充
var buf94 = Buffer.from('abcdef123');
console.log('0 buf94=' + buf94.toString());

var i = 3;
buf94.fill('g', buf94.length - i, buf94.length - i + 1);
console.log('1 buf94=' + buf94.toString());

i = 2;
buf94.fill('h', buf94.length - i, buf94.length - i + 1);
console.log('2 buf94=' + buf94.toString());

i = 1;
buf94.fill('i', buf94.length - i, buf94.length - i + 1);
console.log('3 buf94=' + buf94.toString());

console.log('END.109');

// bufferSlice.js
